package day06;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 编写一个程序，将当前目录下所有的员工文件进行读取，并解析出所有员工为Emp
 * 对象并存入Map。其中key为该员工的名字，value为该员工的emp对象。
 * 然后，要求用户输入一个员工名字，若该员工存在，则输出该员工的名字，年龄，工资，以及入职20周年的纪念日当周的周六的日期。
 * 即:输入名字"张三"
 * 若该员工存在，则输出如下格式:
 * 张三,25,5000,2006-02-14
 * 入职20周年纪念日派对日期: 2026-02-14  （注:若入职日期为:2006-02-14）
 * 若该员工不存在，则输出:"查无此人"
 * @author Bonnie
 *
 */
public class Test12 {
    public static void main(String[] args) throws IOException, ParseException {
        Test12 test12 = new Test12();
        File file = new File(".");
        List<Emp> list=test12.readEmp(file);
        HashMap<String, Emp> map = new HashMap<>();
        for (Emp e:list) {
            map.put(e.getName(),e);
        }
        Scanner input=new Scanner(System.in);
        System.out.println("请输入员工的名字：");
        String name=input.nextLine();
        if (map.containsKey(name)){
            Emp e=map.get(name);
            System.out.println(e);
            Calendar cal=Calendar.getInstance();
            cal.setTime(e.getHiredate());
            cal.add(Calendar.YEAR,20);
            cal.set(Calendar.DAY_OF_WEEK,7);
            SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
            System.out.println("20周年纪念："+sdf.format(cal.getTime()));

        }
        else {
            System.out.println("查无此人！");
        }

    }
    private List<Emp> readEmp(File dir) throws IOException, ParseException {
        //先创一个集合
        ArrayList<Emp> list = new ArrayList<>();
        //将所有员工信息文件找出来
        File[] emps = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".emp") ;
            }
        });
        //通过迭代将每一个转为Emp并加入集合
        for (File file:emps){
            //将字符串参数解析为 Emp 值,方法在下面
            list.add(parseEmp(file));
        }
        return list;
    }

    private Emp parseEmp(File file) throws IOException, ParseException {
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        //文件多大就创建多大的数组long转int
        byte[] buf = new byte[(int) file.length()];
        //将文件数据全部读取出来并转换为字符串
        int len = raf.read(buf);
        String str = new String(buf, 0, len);
        //解析字符串并转换为Emp对象
        String[] information=str.split(",");
        Emp emp=new Emp();
        emp.setName(information[0]);
        emp.setAge(Integer.parseInt(information[1]));
        emp.setGender(information[2]);
        emp.setSalary(Integer.parseInt(information[3]));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date hiredate=sdf.parse(information[4]);
        emp.setHiredate(hiredate);

        //System.out.println("读取emp成员:" + emp+"成功");
        return emp;
    }

}
